home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / parted / device.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-03-16  |  5.1 KB  |  151 lines

  1. /*
  2.     libparted - a library for manipulating disk partitions
  3.     Copyright (C) 1998 - 2001, 2005, 2007 Free Software Foundation, Inc.
  4.  
  5.     This program is free software; you can redistribute it and/or modify
  6.     it under the terms of the GNU General Public License as published by
  7.     the Free Software Foundation; either version 3 of the License, or
  8.     (at your option) any later version.
  9.  
  10.     This program is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.     GNU General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU General Public License
  16.     along with this program.  If not, see <http://www.gnu.org/licenses/>.
  17. */
  18.  
  19. /**
  20.  * \addtogroup PedDevice
  21.  * @{
  22.  */
  23.  
  24. /** \file device.h */
  25.  
  26. #ifndef PED_DEVICE_H_INCLUDED
  27. #define PED_DEVICE_H_INCLUDED
  28.  
  29. #include <parted/timer.h>
  30.  
  31. /** We can address 2^63 sectors */
  32. typedef long long PedSector;
  33.  
  34. /** \deprecated Removal from API planned */
  35. typedef enum {
  36.         PED_DEVICE_UNKNOWN      = 0,
  37.         PED_DEVICE_SCSI         = 1,
  38.         PED_DEVICE_IDE          = 2,
  39.         PED_DEVICE_DAC960       = 3,
  40.         PED_DEVICE_CPQARRAY     = 4,
  41.         PED_DEVICE_FILE         = 5,
  42.         PED_DEVICE_ATARAID      = 6,
  43.         PED_DEVICE_I2O          = 7,
  44.         PED_DEVICE_UBD          = 8,
  45.         PED_DEVICE_DASD         = 9,
  46.         PED_DEVICE_VIODASD      = 10,
  47.         PED_DEVICE_SX8          = 11,
  48. #ifdef ENABLE_DEVICE_MAPPER
  49.         PED_DEVICE_DM           = 12,
  50. #endif
  51.         PED_DEVICE_XVD          = 13
  52. } PedDeviceType;
  53.  
  54. typedef struct _PedDevice PedDevice;
  55. typedef struct _PedDeviceArchOps PedDeviceArchOps;
  56. typedef struct _PedCHSGeometry PedCHSGeometry;
  57.  
  58. /**
  59.  * A cylinder-head-sector "old-style" geometry.
  60.  * 
  61.  * A device addressed in this way has C*H*S sectors.
  62.  */
  63. struct _PedCHSGeometry {
  64.         int             cylinders;
  65.         int             heads;
  66.         int             sectors;
  67. };
  68.  
  69. /** A block device - for example, /dev/hda, not /dev/hda3 */
  70. struct _PedDevice {
  71.         PedDevice*      next;
  72.  
  73.         char*           model;          /**< \brief description of hardware
  74.                                              (manufacturer, model) */
  75.         char*           path;           /**< device /dev entry */
  76.  
  77.         PedDeviceType   type;           /**< SCSI, IDE, etc.
  78.                                              \deprecated \sa PedDeviceType */
  79.         long long       sector_size;            /**< logical sector size */
  80.         long long       phys_sector_size;       /**< physical sector size */
  81.         PedSector       length;                 /**< device length (LBA) */
  82.  
  83.         int             open_count; /**< the number of times this device has
  84.                                          been opened with ped_device_open(). */
  85.         int             read_only;
  86.         int             external_mode;
  87.         int             dirty;
  88.         int             boot_dirty;
  89.  
  90.         PedCHSGeometry  hw_geom;
  91.         PedCHSGeometry  bios_geom;
  92.         short           host, did;
  93.  
  94.         void*           arch_specific;
  95. };
  96.  
  97. /**
  98.  * List of functions implementing architecture-specific operations.
  99.  */
  100. struct _PedDeviceArchOps {
  101.         PedDevice* (*_new) (const char* path);
  102.         void (*destroy) (PedDevice* dev);
  103.         int (*is_busy) (PedDevice* dev);
  104.         int (*open) (PedDevice* dev);
  105.         int (*refresh_open) (PedDevice* dev);
  106.         int (*close) (PedDevice* dev);
  107.         int (*refresh_close) (PedDevice* dev);
  108.         int (*read) (const PedDevice* dev, void* buffer,
  109.                      PedSector start, PedSector count);
  110.         int (*write) (PedDevice* dev, const void* buffer,
  111.                       PedSector start, PedSector count);
  112.         int (*sync) (PedDevice* dev);
  113.         int (*sync_fast) (PedDevice* dev);
  114.         PedSector (*check) (PedDevice* dev, void* buffer,
  115.                             PedSector start, PedSector count);
  116.         void (*probe_all) ();
  117. };
  118.  
  119. extern void ped_device_probe_all ();
  120. extern void ped_device_free_all ();
  121.  
  122. extern PedDevice* ped_device_get (const char* name);
  123. extern PedDevice* ped_device_get_next (const PedDevice* dev);
  124. extern int ped_device_is_busy (PedDevice* dev);
  125. extern int ped_device_open (PedDevice* dev);
  126. extern int ped_device_close (PedDevice* dev);
  127. extern void ped_device_destroy (PedDevice* dev);
  128. extern void ped_device_cache_remove (PedDevice* dev);
  129.  
  130. extern int ped_device_begin_external_access (PedDevice* dev);
  131. extern int ped_device_end_external_access (PedDevice* dev);
  132.  
  133. extern int ped_device_read (const PedDevice* dev, void* buffer,
  134.                             PedSector start, PedSector count);
  135. extern int ped_device_write (PedDevice* dev, const void* buffer,
  136.                              PedSector start, PedSector count);
  137. extern int ped_device_sync (PedDevice* dev);
  138. extern int ped_device_sync_fast (PedDevice* dev);
  139. extern PedSector ped_device_check (PedDevice* dev, void* buffer,
  140.                                    PedSector start, PedSector count);
  141. extern PedConstraint* ped_device_get_constraint (PedDevice* dev);
  142.  
  143. /* private stuff ;-) */
  144.  
  145. extern void _ped_device_probe (const char* path);
  146.  
  147. #endif /* PED_DEVICE_H_INCLUDED */
  148.  
  149. /** @} */
  150.  
  151.